package rtda

// stack frame
type Frame struct {
	lower        *Frame // 当前帧的下面的帧是什么帧，主要用来实现链表数据结构。
	localVars    LocalVars
	operandStack *OperandStack
	// todo
}

/*
	执行方法所需的局部变量表大小和操作数栈深度是由编译器
	预先计算好的，存储在class文件method_info结构的Code属性中
*/
func NewFrame(maxLocals, maxStack uint) *Frame {
	return &Frame{
		localVars:    newLocalVars(maxLocals),
		operandStack: newOperandStack(maxStack),
	}
}

// getters
func (self *Frame) LocalVars() LocalVars {
	return self.localVars
}
func (self *Frame) OperandStack() *OperandStack {
	return self.operandStack
}
